﻿using DelegateBase;

//什么是委托？
//形似一个方法，由delegate关键字修饰
//委托的本质就是一个类
//委托的重要价值 逻辑解耦
{
    CustomerDelegate.Show();
}

Student student = new();
student.SayHiPerfect(SayHellowHuNan,(string par) =>
{
    Console.WriteLine(par);
});

void SayHellowHuNan()
{
    Console.WriteLine("你好");
}

public class Student
{
    //问题1 增加一个新的问候方式 增加一个方法 方法单一 相互独立互不干扰， 实现稳定性，逻辑解耦
    //问题2 增加一个公共的业务逻辑，只需要在SayHiPerfect 中添加动作即可 去掉重复代码
    public void SayHiPerfect(DoHandler doHandler,Action<string> action)
    {
        //
        Console.WriteLine("俩人见面");
        doHandler.Invoke();
        action.Invoke("123");
    }

    public delegate void DoHandler();
}

public enum UserType
{
    Wuhan = 1,
    BeiJing = 2,
    GuangdDong = 3,
}